// 整个工程的主模块，依赖ngRoute子模块（第三方插件）
var mainApp = angular.module("mainApp", ['ui.router','ngRoute','ionic']);
// module.exports = function(mainApp) {

// ngRoute提供的route模块的配置
mainApp.config(['$stateProvider','$urlRouterProvider',
    function($stateProvider, $urlRouterProvider) {
        /**
         * 路由配置
         */
        $urlRouterProvider.otherwise("/loginApp");
        //客户列表
        $stateProvider.state('customerList', {
            url:"/customerList",
            templateUrl: 'template/customerList.html',
            controller: 'customerListCtrl'
        }).
        state('customerDetail', {
            url:"/customerDetail/:id",
            templateUrl: 'template/customerDetail.html',
            controller: 'customerDetailCtrl'
        }).
        state('customerAdd', {
            url:"/customerAdd/:id",
            templateUrl: 'template/customerAdd.html',
            controller: 'customerAddCtrl'
        }).
        state('loginApp', {
            url:"/loginApp",
            templateUrl: './loginApp.html',
            controller: 'loginAppCtrl'
        }).
        state('404', {
            url:"/404",
            templateUrl: 'template/404.html',
        });
    }
]);



//跳转页面时回到顶部
mainApp.run(['$rootScope', '$location',
    function($rootScope, $location) {
        $rootScope.$on('$routeChangeSuccess', function(evt, next, current) {
            $(window).scrollTop(0);
        });
    }
]);

/**
 * 配置angular.js的$http服务，解决使用post提交表单时后台获取不到数据的问题。
 *
 * @see http://my.oschina.net/buwei/blog/191640
 * @param  {String}
 * @return {[type]}
 */
mainApp.config(['$httpProvider', function($httpProvider) {
    $httpProvider.defaults.headers.put['Content-Type'] = 'application/x-www-form-urlencoded';
    $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

    // Override $http service's default transformRequest
    $httpProvider.defaults.transformRequest = [function(data) {
        /**
         * The workhorse; converts an object to x-www-form-urlencoded serialization.
         * @param {Object} obj
         * @return {String}
         */
        var param = function(obj) {
            var query = '';
            var name, value, fullSubName, subName, subValue, innerObj, i;

            for (name in obj) {
                value = obj[name];

                if (value instanceof Array) {
                    for (i = 0; i < value.length; ++i) {
                        subValue = value[i];
                        fullSubName = name + '[' + i + ']';
                        innerObj = {};
                        innerObj[fullSubName] = subValue;
                        query += param(innerObj) + '&';
                    }
                } else if (value instanceof Object) {
                    for (subName in value) {
                        subValue = value[subName];
                        fullSubName = name + '[' + subName + ']';
                        innerObj = {};
                        innerObj[fullSubName] = subValue;
                        query += param(innerObj) + '&';
                    }
                } else if (value !== undefined && value !== null) {
                    query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
                }
            }

            return query.length ? query.substr(0, query.length - 1) : query;
        };

        return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
    }];
}]);
// };
